home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_09_03
/
9n03045a
< prev
next >
Wrap
Text File
|
1991-01-16
|
5KB
|
199 lines
/*******************************************
* NAME : Main.c
*
* DESCRIPTION : Main controlling routine
* for the preset controller.
*******************************************/
#include "pcon.h"
#include "que.h"
#include "serial.h"
extern void key_msg();
extern void message_out();
extern void message_in();
extern void display();
extern void diag();
/* at 08 Timer Control and Status Register: */
extern unsigned char TCSR;
/* at 09:0A Counter: */
extern unsigned char COUNTER;
/* at 0B:0C Output Compare Register: */
extern unsigned char OCR;
/* at 0D:0E Input Capture Register: */
extern unsigned char ICR;
/* at 0F Port 3 Control and Status Register: */
extern unsigned char P3CSR;
/* rate and mode control register: */
extern unsigned char RMCR;
/* transmit/receive control register: */
extern unsigned char TRCSR;
/* receive data register: */
extern unsigned char RDR;
/* transmit data register: */
extern unsigned char TDR;
extern unsigned char P1DDR;
extern unsigned char P1DR;
extern unsigned char P2DDR;
extern unsigned char P2DR;
/* for debugging */
extern unsigned char over, received;
struct sale_status key_buf;
struct rev_status rev_stat;
struct config_table config;
struct g_queue key_que;
struct g_queue in_que;
struct g_queue out_que;
struct g_queue xmit_que;
int globaltime;
int flashtime;
unsigned char disable_on;
unsigned char test_stat;
unsigned char nozzle_up;
extern unsigned char enable_timer;
/* date of release */
const char date[] = "022290";
/* major revision number */
#define revis0 0
/* minor revision number */
#define revis1 6
/**************************************************
* NAME : main
*
* DESCRIPTION: call all the initialization of
* hardware and task setup then
* loops forever and calls each task
* in a round-robin fashion. Each
* task will run until it suspends
* itself then return to main for
* the next task in the list.
**************************************************/
void main()
{
initsystem();
initstructures();
init_task(0,&display);
init_task(1,&message_in);
init_task(2,&message_out);
init_task(3,&key_msg);
clear_irq();
while(true)
{
continue_task(0);
continue_task(1);
continue_task(2);
continue_task(3);
}
}
/**************************************************
* NAME : initstructures
*
* DESCRIPTION: init the data structures for the
* firmware sets up all pointers and
* what ever else need doing
**************************************************/
initstructures ()
{
int i;
/* init the key queue */
key_que.insert = 0;
key_que.remove = 0;
key_que.empty = true;
/* init the in message que */
in_que.insert = 0;
in_que.remove = 0;
in_que.empty = true;
/* init the out message que */
out_que.insert = 0;
out_que.remove = 0;
out_que.empty = true;
/* init the Transmit que */
xmit_que.insert = 0;
xmit_que.remove = 0;
xmit_que.empty = true;
/* init the all other data as needed */
}
/***************************************************
* NAME: initsystem
*
* DESCRIPTION:
* Init the counter timer chip for continous
* operation and to interupt at overflow.
* Init the serial port for receive and send and
* to generate an interrupt whenever the transmit
* buffer is empty and the receive buffer is full.
***************************************************/
#define ETOI 0x04
initsystem()
{
/* set up the rate and mode control
for internal clock and 9600 */
RMCR = CC0 | SS0;
/* set up the serial port to transmit and receive */
TRCSR = normal_mode;
/* set up the free running counter
to interupt at overflow */
TCSR = ETOI;
/* set up port 1 bits 0-3 as write only
and bits 4-7 as read only */
P1DDR = 0x0f;
/* set up port 2 bit 0 as a write bit
and turn off the serial transmit buffer */
P2DDR = 0x01;
P2DR = 0xFF;
}
/**************************************************
* NAME : set_irq, clear_irq
*
* DESCRIPTION: two routines that set the
* interupt mask and clear the
* interrupt mask in the condition
* code register of the 6801
*************************************************/
/* routine to set the interupt mask */
set_irq()
{
;
#asm
sei
#endasm
}
/* routine to clear the interupt mask */
clear_irq()
{
;
#asm
cli
#endasm
}